// #include<stdio.h>

// #define ONE      0001 //0000 0001
// #define TWO      0002 //0000 0010
// #define THREE    0004 //0000 0100

// void func(int flags)
// {
//     if(flags& ONE) printf("flags has ONE! ");
//     if(flags& TWO) printf("flags has TWO! ");
//     if(flags& THREE) printf("flags has THREE! ");
//     printf("\n");
// }

// int main()
// {
//     func(ONE);
//     func(THREE);
//     func(ONE | TWO);
//     func(ONE | THREE | TWO);
//     return 0;
// }







// #include <stdio.h>
// #include <sys/types.h>
// #include <sys/stat.h>
// #include <fcntl.h>
// #include <unistd.h>
// #include <string.h>

// int main()
// {
//     umask(0);
//     int fd = open("myfile", O_WRONLY|O_CREAT, 0644);
//     if(fd < 0){
//         perror("open");
//         return 1;
//     } 
//     int count = 5;
//     const char *msg = "hello bit!\n";
//     int len = strlen(msg);

//     while(count--){
//         write(fd, msg, len);//fd: 后面讲， msg：缓冲区首地址， len: 本次读取，期望写入多少个字节的数据。 返回值：实际写了多少字节数据
//     } 
//     close(fd);
//     return 0;
// }




// #include <stdio.h>
// #include <sys/types.h>
// #include <sys/stat.h>
// #include <fcntl.h>
// #include <unistd.h>
// #include <string.h>

// int main()
// {
//     int fd = open("myfile", O_RDONLY);
//     if(fd < 0){
//         perror("open");
//         return 1;
//     } 
    
//     const char *msg = "hello bit!\n";
//     char buf[1024];

//     while(1){
//         ssize_t s = read(fd, buf, strlen(msg));//类⽐write
//         if(s > 0){
//             printf("%s", buf);
//         }
//         else{
//             break;
//         }
//     } 
//     close(fd);
//     return 0;
// }







// #include <stdio.h>
// #include <string.h>
// #include <unistd.h>
// int main()
// {
//     FILE *fp = fopen("myfile", "r");
//     if(!fp){
//         printf("fopen error!\n");
//         return 1;
//     } 
//     char buf[1024];
//     const char *msg = "hello bit!\n";
//     while(1){
//         //注意返回值和参数，此处有坑，仔细查看man手册关于该函数的说明
//         ssize_t s = fread(buf, 1, strlen(msg), fp);
//         if(s > 0){
//             buf[s] = 0;
//             printf("%s", buf);
//         } 
//         if(feof(fp)){
//             break;
//         }
//     } 
//     fclose(fp);
//     return 0;
// }


// #include <stdio.h>
// #include <sys/types.h>
// #include <sys/stat.h>
// #include <fcntl.h>
// #include <string.h>
// int main()
// {
//     char buf[1024];
//     ssize_t s = read(0, buf, sizeof(buf));
//     if(s > 0){
//         buf[s] = 0;
//         write(1, buf, strlen(buf));
//         write(2, buf, strlen(buf));
//     } 
//     return 0;
// }



// #include <stdio.h>
// #include <sys/types.h>
// #include <sys/stat.h>
// #include <fcntl.h>
// int main()
// {
//     int fd = open("myfile", O_RDONLY);
//     if(fd < 0){
//         perror("open");
//         return 1;
//     }
//     printf("fd: %d\n", fd);
//     close(fd);
//     return 0;
// }



// #include <stdio.h>
// #include <sys/types.h>
// #include <sys/stat.h>
// #include <fcntl.h>
// int main()
// {
//     close(0);
//     //close(2);
//     int fd = open("myfile", O_RDONLY);
//     if(fd < 0){
//         perror("open");
//         return 1;
//     }
//     printf("fd: %d\n", fd);
//     close(fd);
//     return 0;
// }



// #include <stdio.h>
// #include <sys/types.h>
// #include <sys/stat.h>
// #include <fcntl.h>
// #include <stdlib.h>
// int main()
// {
//     close(1);
//     int fd = open("myfile", O_WRONLY|O_CREAT, 00644);
//     if(fd < 0){
//         perror("open");
//         return 1;
//     } 
//     printf("fd: %d\n", fd);
//     //fflush(stdout);
//     close(fd);
//     exit(0);
// }


// #include <stdio.h>
// #include <unistd.h>
// #include <fcntl.h>
// #include <stdlib.h>

// int main() {

//     int file_fd = open("output.txt", O_WRONLY | O_CREAT | O_TRUNC, 0644);
//     if (file_fd == -1) {
//         perror("open");
//         exit(EXIT_FAILURE);
//     }

//     if (dup2(file_fd, 1) == -1) {
//         perror("dup2");
//         close(file_fd);
//         exit(EXIT_FAILURE);
//     }

//     printf("This message is written to the file via printf!\n");
    
//     close(file_fd);
//     return 0;
// }


// #include <stdio.h>
// #include <string.h>
// #include <sys/types.h>
// #include <sys/stat.h>
// #include <fcntl.h>
// #include <unistd.h>

// int main() {
//     close(1);
//     int fd = open("log.txt", O_WRONLY | O_CREAT | O_TRUNC, 0666);
//     if (fd < 0) {
//         perror("open");
//         return 0;
//     } 
//     printf("hello world: %d\n", fd);
//     fflush(stdout);
//     close(fd);
//     return 0;
// }





#include <stdio.h>
#include <string.h>
int main()
{
    const char *msg0="hello printf\n";
    const char *msg1="hello fwrite\n";
    const char *msg2="hello write\n";
    printf("%s", msg0);
    fwrite(msg1, strlen(msg0), 1, stdout);
    write(1, msg2, strlen(msg2));
    
    fork();
    return 0;
}